package com.da.springtest.daoru;

import com.da.springtest.daoru.test1.MainConfig1;
import com.da.springtest.daoru.test2.MainConfig2;
import com.da.springtest.daoru.test3.MainConfig3;
import com.da.springtest.daoru.test5.MainConfig5;
import com.da.springtest.daoru.test6.MainConfig6;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

/**
 * Service1和Service2成功注册到容器了。通过@Import导入的2个类，bean名称为完整的类名。
 * 也可以指定被导入类的bean名称，使用@Compontent注解就可以了
 *
 * 1.@Import可以用来批量导入任何普通的组件、配置类，将这些类中定义的所有bean注册到容器中
 * 2.@Import常见的5种用法需要掌握
 * 3.掌握ImportSelector、ImportBeanDefinitionRegistrar、DeferredImportSelector的用法
 * 4.DeferredImportSelector接口可以实现延迟导入、按序导入的功能
 * 5.spring中很多以@Enable开头的都是使用@Import集合ImportSelector方式实现的
 * 6.BeanDefinitionRegistry接口：bean定义注册器，这个需要掌握常见的方法
 */
public class ImportTest {
    public static void main(String[] args) {
        //1.通过AnnotationConfigApplicationContext创建spring容器，参数为@Import标注的类
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(MainConfig1.class);
        //2.输出容器中定义的所有bean信息
        show(context);
        System.out.println("------------------------------------------");
        AnnotationConfigApplicationContext context2 = new AnnotationConfigApplicationContext(MainConfig2.class);
        show(context2);
        System.out.println("------------------------------------------");
        AnnotationConfigApplicationContext context3 = new AnnotationConfigApplicationContext(MainConfig3.class);
        show(context3);
        System.out.println("------------------------------------------");
        new AnnotationConfigApplicationContext(MainConfig5.class);
        System.out.println("------------------------------------------");
        new AnnotationConfigApplicationContext(MainConfig6.class);
    }

    private static void show(AnnotationConfigApplicationContext context) {
        for (String beanName : context.getBeanDefinitionNames()) {
            System.out.println(String.format("%s->%s", beanName, context.getBean(beanName)));
        }
    }
}